<?php

namespace app\wechat\controller;
use think\Controller;
use think\Config;
use app\wechat\lib\Response;

class Index extends Controller
{
    // http://jzl.51dojob.com/wechat
    public function index()
    {
        // 微信加密签名，signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
        $signature = $this->request->get('signature/s','');
        // 时间戳
        $timestamp = $this->request->get('timestamp/s','');
        // 随机数
        $nonce     = $this->request->get('nonce/s','');
        // 随机字符串
        $echostr   = $this->request->get('echostr/s','');
        // Token
        $token     = Config::get('token');

        if ( empty($echostr) ) {
            // 消息处理
            $this->responseMsg();
        } else {
            // 将token、timestamp、nonce三个参数进行字典序排序
            $arr = [$token, $timestamp, $nonce];
            sort($arr, SORT_STRING);
            // 将三个参数字符串拼接成一个字符串进行sha1加密
            $str = sha1( implode($arr) );
            if ($str == $signature) echo $echostr;
        }
    }

    // ----------------------------------------------------

	// 消息处理
	private function responseMsg()
	{
		$postXml = $GLOBALS["HTTP_RAW_POST_DATA"];
		if ( !empty($postXml) ) {
			$postObj = simplexml_load_string($postXml, 'SimpleXMLElement', LIBXML_NOCDATA);
            $postArr = json_decode(json_encode($postObj),true);
            $msgType = strtolower($postArr['MsgType']);
            switch ($msgType) {
            	// 事件消息
                case 'event':
                	$msg = $this->event($postArr);
                    break;
                // 文本消息
                case 'text':
                	$msg = $this->text($postArr);
                    break;
                default:
                    $msg = '';
                    break;
            }
            echo $msg;
		} else {
			echo '';
		}
	}

	// ----------------------------------------------------

	// 文本消息处理
	private function text($postArr)
	{
        // eg
        $content = strtolower($postArr['Content']);
        $msg = Response::text($postArr, $content);

		return isset($msg) ? $msg : '';
	}

	// ----------------------------------------------------

	// 事件消息处理
	private function event($postArr)
	{
		$event = strtolower($postArr['Event']);
		switch ($event) {
            // 关注事件
            case 'subscribe':
                $msg = $this->subscribe($postArr);
                break;
            // 取消关注事件
            case 'unsubscribe':
                $msg = $this->unsubscribe($postArr);
                break;
        }
        return isset($msg) ? $msg : '';
	}

	// 关注事件处理
	private function subscribe($postArr)
	{
        // $content = 'welcome';
        // $msg = Response::text($postArr, $content);
        // return $msg;
        
        // $data = [
        //     'num'  => 1,
        //     'list' => [
        //         'title'       => '欢迎您使用价值链',
        //         'description' => '价值链，项目估值系统领导者',
        //         'picurl'      => 'https://www.baidu.com/img/bd_logo1.png',
        //         'url'         => 'https://www.baidu.com/',
        //     ],
        // ];
        // $msg = Response::news($postArr, $data = []);
        
        $mediaId = 'I_66PdgwfR4yuWrYDtnQqJ8m3tuGx0uyekUFXmW01wQ';
        $msg = Response::img($postArr,$mediaId);
        return $msg;
	}

	// 取消关注事件处理
	private function unsubscribe($postArr)
	{
		return '';
	}
}
